<?php

namespace app\common\controller;
use OSS\OssClient;
use OSS\Core\OssException;
use think\facade\Config;

/**
 * Common控制器基类.
 */
class Common
{
    /**
     * 上传图片到阿里云OSS
     *
     * @param string $files  文件
     * @return array $data 信息
     */
    public function uploadImageAli($files){
        $name = $files['name'];
        $format = strrchr($name, '.');//截取文件后缀名如 (.jpg)
        // 阿里云主账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维，请登录RAM控制台创建RAM账号。
        $accessKeyId = Config::get('oss.accessKeyId');
        $accessKeySecret = Config::get('oss.accessKeySecret');
        // Endpoint以杭州为例，其它Region请按实际情况填写。
        $endpoint = Config::get('oss.endpoint');
        // 设置存储空间名称。
        $bucket= Config::get('oss.bucket');
        // 设置文件名称。
        //这里是由sha1加密生成文件名 之后连接上文件后缀，生成文件规则根据自己喜好，也可以用md5
        //前面video/head/ 这是我的oss目录
        $object = 'static/index/'.date('Ymd').'/'.sha1(date('YmdHis') . uniqid()) . $format;;
        // <yourLocalFile>由本地文件路径加文件名包括后缀组成，例如/users/local/myfile.txt。
        $filePath = $files['tmp_name'];
        try{
            $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
            $result = $ossClient->uploadFile($bucket, $object, $filePath);
            if(!$result){
                $data['status'] = 0;
                return $data;
            }else{
                $url['url'] = $result['info']['url'];
                $url['local_url'] = parse_url($url['url'],PHP_URL_PATH);
                $data['status'] = 1;
                $data['url'] = $url;
                return $data;
            }
        } catch(OssException $e) {
            return $e->getMessage();
        }
    }

    /**
     * 推送消息
     *
     * @param string $url  推送的url地址，使用自己的服务器地址 http://www.peisong.com:2121/
     * @param string $to_uid  指明给谁推送，为空表示向所有在线用户推送
     * @param array $content 信息
     */
    // public function sendMessage($url,$to_uid = '',$content){
    //     $post_data = array(
    //         "type" => "publish",
    //         "content" => $content,
    //         "to" => $to_uid,
    //     );
    //     $ch = curl_init ();
    //     curl_setopt($ch, CURLOPT_URL, $url);
    //     curl_setopt($ch, CURLOPT_POST, 1);
    //     curl_setopt($ch, CURLOPT_HEADER, 0);
    //     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    //     curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    //     curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
    //     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts
    //     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    //     $res = curl_exec($ch);
    //     return $res;
    // }

    /**
     * 随机字符串
     *
     * @param string $url  推送的url地址，使用自己的服务器地址 http://www.peisong.com:2121/
     * @param string $to_uid  指明给谁推送，为空表示向所有在线用户推送
     * @param array $content 信息
     */
    public function randString(){
        // $strs = "QWERTYUIOPASDFGHJKLZXCVBNM1234567890qwertyuiopasdfghjklzxcvbnm";
        // $name = substr(str_shuffle($strs),mt_rand(0,strlen($strs)-11),$length);
        // return $name;

        return rand(1000,9999);
    }

    /**
     * 求两个已知经纬度之间的距离,单位为千米
     *
     * @param lng1 $ ,lng2 经度
     * @param lat1 $ ,lat2 纬度
     * @return float 距离，单位千米
     * @author www.Alixixi.com
     */
    function getdistance($lng1, $lat1, $lng2, $lat2) {
        // 将角度转为狐度
        $radLat1 = deg2rad($lat1); //deg2rad()函数将角度转换为弧度
        $radLat2 = deg2rad($lat2);
        $radLng1 = deg2rad($lng1);
        $radLng2 = deg2rad($lng2);
        $a = $radLat1 - $radLat2;
        $b = $radLng1 - $radLng2;
        $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))) * 6378.137;
        return $s;
    }

    /**
     * 图片处理
     *
     * @param $img  ,图片
     * @return $img
     */
    function imgUrl($img) {
        if(!empty($img))
        {
            if(substr($img, 0, 4) != 'http')
            {
                return 'http://'.$_SERVER['HTTP_HOST'].$img;
            }
            return $img;
        }
    }
}